home *** CD-ROM | disk | FTP | other *** search
/ SPACE 2 / SPACE - Library 2 - Volume 1.iso / music / 7 / ramdisk / copys.s < prev    next >
Text File  |  1985-11-19  |  6KB  |  244 lines

  1. *
  2. * COPY.S
  3. *
  4. * WRITTEN NOV 85 BY jENS-uWE mAGER
  5. *
  6. * Pathnames added March 86 by Scott Adams.
  7. *  See Ram.doc for usage.
  8. *
  9.  
  10. * OFFSETS INTO BASE-PAGE
  11.  
  12. PRGLEN    EQU         $C
  13. DATALEN   EQU         $14
  14. BSSLEN    EQU         $1C
  15. CMDLIN    EQU         $80
  16.  
  17. * TRAPS
  18.  
  19. BIOS      EQU         13
  20. XBIOS     EQU         14
  21. TOS       EQU         1
  22.  
  23. * FUNCTIONS
  24.  
  25. PRSTRF    EQU         9
  26. CREATF    EQU         $3C
  27. OPENF     EQU         $3D
  28. CLOSEF    EQU         $3E
  29. READF     EQU         $3F
  30. WRITEF    EQU         $40
  31. LSEEKF    EQU         $42
  32. TERMF     EQU         $4C
  33.  
  34.           TEXT
  35. START:
  36.           LEA       INITS,A0
  37.           BSR       PRSTR
  38.           LEA       FNAME,A0
  39.           BSR       OPEN
  40.           BMI       ERRXIT
  41.           MOVE.W    D0,D7               ;FILE HANDLE
  42.           BSR       FILELEN
  43.           BMI       ERRXIT
  44.           LEA       BUFFER,A0
  45.           MOVE.L    A0,-(SP)            ;BUFFER AD
  46.           ADD.L     D0,A0
  47.           MOVE.B    #0,(A0)+
  48.           MOVE.L    A0,LISTEND
  49.           LEA       -256(SP),A1
  50.           SUB.L     A0,A1
  51.           MOVE.L    A1,MAX
  52.           MOVE.L    D0,-(SP)            ;LENGTH
  53.           MOVE.W    D7,-(SP)            ;HANDLE
  54.           MOVE.W    #READF,-(SP)
  55.           TRAP      #TOS
  56.           ADD.L     #12,SP
  57.           TST.L     D0
  58.           BMI       ERRXIT
  59.           MOVE.W    D7,D0
  60.           BSR       CLOSE
  61.           BMI       ERRXIT
  62.           LEA       BUFFER,A6
  63. ;
  64.     MOVE.W    (A6),DRIVE             ; CONTAINS c:
  65.     CMP.B    #':",DRIVE+1
  66.     BNE    ERRXIT
  67. ;
  68.     MOVE.L    LISTEND,A6          ; START AT END OF LIST
  69.     LEA    -1(A6),A6    
  70. MAINLP:   BSR       SKIP
  71.           BCS       EXIT
  72.           BSR       PROGRESS
  73.     MOVE.L    DESTST,A0
  74.           BSR       CREAT
  75.           BMI       ERRXIT
  76.           MOVE.W    D0,D6               ;HANDLE FOR NEW FILE
  77.     MOVE.L    STRING,A0    ;SOURCE STRING
  78.           BSR       OPEN
  79.           BMI       ERRXIT
  80.           MOVE.W    D0,D5               ;HANDLE FOR OLD FILE
  81. COPYLP:   MOVE.L    LISTEND,-(SP)
  82.           MOVE.L    MAX,-(SP)
  83.           MOVE.W    D5,-(SP)
  84.           MOVE.W    #READF,-(SP)
  85.           TRAP      #TOS
  86.           ADD.L     #12,SP
  87.           TST.L     D0
  88.           BMI       ERRXIT
  89.           BEQ       ISEOF
  90.           MOVE.L    LISTEND,-(SP)
  91.           MOVE.L    D0,-(SP)
  92.           MOVE.W    D6,-(SP)
  93.           MOVE.W    #WRITEF,-(SP)
  94.           TRAP      #TOS
  95.           ADD.L     #12,SP
  96.           TST.L     D0
  97.           BMI       ERRXIT
  98.           BRA       COPYLP
  99. ISEOF:    MOVE.W    D6,D0
  100.           BSR       CLOSE
  101.           BMI       ERRXIT
  102.           MOVE.W    D5,D0
  103.           BSR       CLOSE
  104.           BMI       ERRXIT
  105.           MOVE.L    A5,A6
  106.           BRA       MAINLP
  107.  
  108. EXIT:
  109.           MOVE.W    #0,-(SP)
  110.           BRA.S     XIT
  111. ERRXIT:
  112.           MOVE.W    #1,-(SP)
  113. XIT:
  114.           MOVE.W    #TERMF,-(SP)
  115.           TRAP      #TOS
  116.  
  117. PROGRESS:
  118.           LEA       MESS1,A0
  119.           BSR       PRSTR
  120.           MOVE.L    STRING,A0
  121.           BSR       PRSTR
  122.           LEA       MESS2,A0
  123.           BSR       PRSTR
  124.     MOVE.L    DESTST,A0
  125.           BSR       PRSTR
  126.           LEA       MESS3,A0
  127.  
  128. PRSTR:
  129.           MOVE.L    A0,-(SP)
  130.           MOVE.W    #PRSTRF,-(SP)
  131.           TRAP      #TOS
  132.           ADDQ.L    #6,SP
  133.           RTS
  134.  
  135. OPEN:
  136.           CLR.W     -(SP)               ;READONLY
  137.           MOVE.L    A0,-(SP)
  138.           MOVE.W    #OPENF,-(SP)
  139.           TRAP      #TOS
  140.           ADDQ.L    #8,SP
  141.           TST.W     D0
  142.           RTS
  143.  
  144. CREAT:
  145.           CLR.W     -(SP)               ;STD FILE R/W
  146.           MOVE.L    A0,-(SP)
  147.           MOVE.W    #CREATF,-(SP)
  148.           TRAP      #TOS
  149.           ADDQ.L    #8,SP
  150.           TST.W     D0
  151.           RTS
  152.  
  153. CLOSE:
  154.           MOVE.W    D0,-(SP)
  155.           MOVE.W    #CLOSEF,-(SP)
  156.           TRAP      #TOS
  157.           ADDQ.L    #4,SP
  158.           TST.W     D0
  159.           RTS
  160.  
  161. FILELEN:
  162.           MOVE.W    D0,-(SP)
  163.           MOVE.W    #2,-(SP)
  164.           MOVE.W    D0,-(SP)
  165.           CLR.L     -(SP)
  166.           MOVE.W    #LSEEKF,-(SP)
  167.           TRAP      #TOS
  168.           ADD.L     #10,SP
  169.           MOVE.W    (SP)+,D1
  170.           MOVE.L    D0,-(SP)
  171.           MOVE.W    #0,-(SP)
  172.           MOVE.W    D1,-(SP)
  173.           CLR.L     -(SP)
  174.           MOVE.W    #LSEEKF,-(SP)
  175.           TRAP      #TOS
  176.           ADD.L     #10,SP
  177.           MOVE.L    (SP)+,D0
  178.           RTS
  179. ;
  180. ; SKIP THE PATHNAMES. BUILD DESTINATION NAME BACKWARDS INTO BUFFER
  181. ;
  182. SKIP0:    MOVE.L    A5,A6
  183. SKIP:    MOVE.L    A6,A5    ;WHERE WE LEFT OFF IN LIST
  184.     LEA    DESTEND,A0    ;WHERE TO PUT IT
  185.     CLR.B    -(A0)    ;NULL TERMINATED STRING
  186. SKLP    MOVE.B    -(A5),D0
  187.     BEQ    SKLP    ;SKIP 0'S
  188.     CMP.B    #$20,D0    ;SKIP SPACES
  189.     BEQ    SKLP
  190.     CMP.B    #$A,D0
  191.     BEQ    SKLP
  192.     CMP.B    #$D,D0    ;BEGIN OF NEXT LINE
  193.     BEQ    SKIPEND
  194.     CMP.B    #'\',D0
  195.     BEQ    SKIPEND
  196.     CMP.B    #':",D0
  197.     BEQ    SKIPEND
  198.     MOVE.B    D0,-(A0)    ;PUT INTO DESTINATION NAME
  199.     BRA    SKLP
  200. ;
  201. SKIPCR    MOVE.B    -(A5),D0
  202.     CMP.L    #BUFFER,A5
  203.     BEQ    SKIPEOF    ;AT INITIAL DRIVE SPEC! we done!
  204. SKIPEND    CMP.B    #$D,D0    ;FIND CR OF PREVIOUS LINE
  205.     BNE    SKIPCR
  206.     CLR.B    (A5)    ;MAKE SOURCE STRING NULL TERMINATED
  207. ;
  208.     CMP.L    #DESTEND-1,A0    ;SEE IF WE GOT ANYTHING
  209.     BEQ    SKIP0    ;NO
  210. ;
  211.     MOVE.B    DRIVE+1,-(A0)    ;PUT IN DRIVE SPEC
  212.     MOVE.B    DRIVE,-(A0)
  213.     MOVE.L    A0,DESTST
  214.     MOVE.L    A5,A6    ;SAVE WHERE WE WHERE
  215.     MOVE.L    A5,STRING    ;save start of source string
  216.     ADDQ.L    #2,STRING    ;SKIP CR,LF
  217.           RTS
  218. ;
  219. SKIPEOF:  OR        #1,CCR
  220.           RTS
  221.  
  222.           DATA
  223. LISTEND:  DC.L      0
  224. MAX:      DC.L      0
  225. FNAME:    DC.B      'FILE.LST',0
  226. MESS1:    DC.B      'Copying ',0
  227. MESS2:    DC.B      ' -> ',0
  228. INITS:    DC.B      $1B,'E',13,10,'Fast Ram Disk Copy by Jens-Uwe Mager & Scott Adams',13,10 ;fall through mess3
  229. MESS3:    DC.B      13,10,0
  230.  
  231.           BSS
  232. DESTST    DS.L    1
  233. STRING    DS.L    1
  234. DRIVE:    DS.W    1
  235. DESTNAME: DS.B      128
  236. DESTEND:
  237. ;
  238. ; NOTE EVEN THOUGH BUFFER IS 1 BYTE THE PROGRAM WILL USE ALL
  239. ; MEMORY FROM BUFFER TO START OF STACK, OR ALL MEMORY AVAILABLE!
  240. ;
  241. BUFFER:   DS        1
  242. ;
  243.           END
  244.